Zdrojový kód pro MAPLE

Výsledkem bude Projektivní prostor dimenze dvě.

Použité knihovny:
Načíst knihovny:
> with(plots):
> readlib(spline):
Konstanty a parametry rozměru obrázku:
Poloměr koule
> R:= 1:
Poloměr trubek pro tubeplot
> Radius:= R/20:
Počet obrázků v animaci
> Sekvenci:=45:
Časový průběh - nastaveno tak, že na konci běží čas pomaleji
> Cas:=t-> sin(Pi/2*t):
Obarvení křivek - x=0..1
> Color:=(x,y) -> 0.47+0.3*x:
Barva koule
> Color_koule:= 0.5:
Pomocné funkce:
> bod:= (r, alfa)-> [r*cos(alfa), r*sin(alfa), 0]:
> id:= (X, t)-> X:
> slunce:= (X, t)-> [X[1]*cos(t*Pi), 0, X[1]*sin(t*Pi)]:
> rotace:= (X, t)-> [0, X[2]*cos(t*Pi), X[2]*sin(t*Pi)]:
> stredem:=(X, t)-> [(1-t)*X[1], (1-t)*X[2], (1-t)*X[3]]:
> Krat:= (a, b)-> [a*b[1], a*b[2], a*b[3]]:
> Zoom:=r-> 2*sin(Pi/2*r):
Trajektorie šesti záchytných bodů:
> SA:=bod(R, 5/6*Pi):
> A:=t-> Krat(Zoom(t), id(SA, t)):
> SB:=bod(R, 7/6*Pi):
> B:=t-> Krat(Zoom(t), id(SB, t)):
> SE:=bod(R, 3/6*Pi):
> E:=t-> Krat(Zoom(t), stredem(SE, t)):
> SF:=bod(R, 9/6*Pi):
> F:=t-> Krat(Zoom(t), stredem(SF, t)):
> SK:=bod(R, 1/6*Pi):
> K:=t-> Krat(Zoom(t), slunce(SK, t)+ rotace(SK, t)):
> L:=t-> Krat(Zoom(t), slunce(SK, t)- rotace(SK, t)):
Vyseparvat x-ové, y-ové a z-ové souřadnice trajektorií bodů:
> SX:=[seq(i, i=1..13)]:
> SYQ:=t-> A(t), E(t), K(t), L(t), F(t), B(t):
> SY :=t-> [SYQ(t), SYQ(t), A(t)]:
> SYx:=t-> [seq(SY(t)[i][1], i=1..13)]:
> SYy:=t-> [seq(SY(t)[i][2], i=1..13)]:
> SYz:=t-> [seq(SY(t)[i][3], i=1..13)]:
Propojit záchytné body splinem v každém čase a souřadnici:
> RPx:=(x,t)-> spline(SX, SYx(t), x, cubic):
> RPy:=(x,t)-> spline(SX, SYy(t), x, cubic):
> RPz:=(x,t)-> spline(SX, SYz(t), x, cubic):
Projektivní prostor - parametrizace R^2 do R^4:
> RP:= (x,t)-> [RPx(x,t), RPy(x,t), RPz(x,t)]:
Vlastní počítací proces:
> RPcom:=unapply(RP(x,t), x, t):
Zobrazit Projektivní prostor:
Projektivní prostor v E^4 - výsledek:
> ColorRP:=(x,y) -> Color((x-4)/6, y):
> RPIm:=i->tubeplot(RPcom(x, Cas(i/Sekvenci)), x=4..10, radius=Radius, color=ColorRP):
> ProjPr:=seq(RPIm(i), i=0..Sekvenci):
> Image1:=display([ProjPr], insequence=true):
Projektivní prostor v E^3 - rotující plocha, po které se křivka pohybuje (protíná sama sebe):
> Rotace:=t-> [t*360, 65+40*sin(Pi*t)^2]:
> RedKrivka:=tubeplot(RPcom(x, Cas(0.45)), x=4..10, radius=Radius, color=Red):
> RPplocha:=plot3d(RPcom(x,t), x=4..10, t=0..1, color=Color((x-4)/6, t)):
> Image2:=seq(display([RPplocha, RedKrivka], orientation=Rotace(i/Sekvenci)), i=0..Sekvenci):
Zobrazit povrch koule ve 4D - vzor zobrazeni:
Obruče:
> Obruc:=(x,s)-> [x, sqrt(1-x^2)*cos(s)+2, sqrt(1-x^2)*sin(s)]:
> ColorObruc:=(x,y) -> Color(x/(2*Pi), y):
> ObrucIm:=t-> tubeplot({Obruc(t, s), Obruc(-t, s+Pi)}, s=0..2*Pi, radius=Radius, color=ColorObruc):
> Koule:=seq(ObrucIm(1-Cas(i/Sekvenci)), i=0..Sekvenci):
> Image3:=display([Koule], insequence=true):
Povrch koule ve 3D:
> Image4:=plot3d([cos(u)*sin(v), sin(u)*sin(v)+2, cos(v)], u=0..2*Pi, v=0..Pi, color=Color_koule, style=WIREFRAME):
Zobrazit konečný výsledek:
4D verze:
> display([Image1, Image3, Image4], orientation=[-51, 52], scaling=CONSTRAINED);
3D verze:
> display([Image2], insequence=true, scaling=CONSTRAINED);